package zb.blog.base.util;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

/**
 * @Author: BinZhang
 * @Date: 2018/6/3 13:02
 * @Description:时间操作
 */
public class TimeUtil {
    private static long minute = 60L;
    private static long hour = 3600L;
    private static long day = 86400L;
    private static long week = 604800L;

    /**
     * @Author: BinZhang
     * @Date: 2018/6/3 13:07
     * @Description:返回x分钟前，x小时前，x天前，1周前，切确时间
     * @param dateTimeStr 传入的时间字符串  必须是 yyyy-MM-dd HH:mm:ss 格式的
     * @param returnTime 如果不满足几周前，几天前，几小时前....等，是否返回日期和时间，true：返回日期和时间 false：只要日期不要时间
     * @return 返回一个时间差，返回x分钟前，x小时前，x天前，1周前，切确时间
     */
    /**
     * @param dateTimeStr
     * @param returnTime
     * @return
     */

    public static String timeToDiff(String dateTimeStr, boolean returnTime) {
        LocalDateTime localDateTime = LocalDateTime.now();//当前系统时间
        long curEpochSecond = localDateTime.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();//获取秒数

        DateTimeFormatter dtf_dateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//格式化时间
        LocalDateTime dateTime = localDateTime.parse(dateTimeStr, dtf_dateTime);
        DateTimeFormatter dtf_date = DateTimeFormatter.ISO_DATE;//格式化为日期，只要年月日，不要时分秒
        String date = dtf_date.format(dateTime);
        long epochSecond = dateTime.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();

        long diffSesond = curEpochSecond - epochSecond;//秒差
        if (diffSesond < 0) {//如果传入的时间大于当前系统时间，就返回日期或日期时间
            if (returnTime) {
                return dateTimeStr;
            } else {
                return date;
            }
        } else if (diffSesond >= week * 3) {//如果当前时间大于三个周就直接返回日期或日期时间
            if (returnTime) {
                return dateTimeStr;
            } else {
                return date;
            }
        } else if (diffSesond >= week * 2 + day) {//如果大于等于15天且小于三个周 就返回 半个月前
            return "半个月前";
        } else if (diffSesond >= week) {//如果大于等于7天且小于两个周 就返回 一周前
            return "一周前";
        } else if (diffSesond >= day) {//如果大于等于1天且小于一个周  就返回 x天前
            return (int) (diffSesond / day) + "天前";
        } else if (diffSesond >= hour) {//如果大于等于1小时且小于1天  就返回 x小时前
            return (int) (diffSesond / hour) + "小时前";
        } else if (diffSesond >= minute * 5) {//如果大于等于5分钟且小于一天  就返回 x分钟前
            return (int) (diffSesond / minute) + "分钟前";
        } else {//小于5分钟的 就返回 刚刚
            return "刚刚";
        }
    }

    public static void main(String[] args) {
        System.out.println(TimeUtil.timeToDiff("2018-06-03 14:25:13", false));
    }
}
